package pms.dao;

import java.util.ArrayList;
import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import pms.om.Kategorie;
import pms.om.Noten;
import pms.om.Stimme;

public class StimmeDao extends HibernateDaoSupport{
	private NotenDao notenDao;

	/** Getter
	 * @return the notenDao
	 */
	public NotenDao getNotenDao() {
		return notenDao;
	}

	/** Setter
	 * @param notenDao the notenDao to set
	 */
	public void setNotenDao(NotenDao notenDao) {
		this.notenDao = notenDao;
	}

	/** findById
	 * @param id
	 * @return the Stimme
	 */
	public Stimme findById (int id) {
		HibernateTemplate template = getHibernateTemplate();
		return (Stimme) template.get(Stimme.class, id);
	}
	
	/** findNotenByStimmeId
	 * @param id
	 * @return the foundNoten
	 */
	@SuppressWarnings("unchecked")
	public List<Noten> findNotenByStimmeId(int id) {
		HibernateTemplate template = getHibernateTemplate();
		List<Noten> alleNoten = template.loadAll(Noten.class);
		List<Noten> foundNoten = new ArrayList<Noten>();
		for (Noten noten : alleNoten) {
			if (noten.getStimme().getId() == id) {
				foundNoten.add(noten);
			}
		}
		return foundNoten;
	}
	
	/** findAll
	 * @return the results
	 */
	@SuppressWarnings("unchecked")
	public List<Stimme> findAll() {
		HibernateTemplate template = getHibernateTemplate();
		List<Stimme> results = template.loadAll(Stimme.class);
		return results;
	}
	
	/** create
	 * @param stimmenbezeichnung
	 */
	public void create(String stimmenbezeichnung) {
		HibernateTemplate template = getHibernateTemplate();
		Stimme s = new Stimme(stimmenbezeichnung);
		template.persist(s);
	}
	
	/** modify
	 * @param id
	 * @param stimmenbezeichnung
	 */
	public void modify(int id, String stimmenbezeichnung) {
		HibernateTemplate template = getHibernateTemplate();
		Stimme s = (Stimme) template.get(Stimme.class, id);
		s.setStimmenbezeichnung(stimmenbezeichnung);
		template.saveOrUpdate(s);
	}
	
	/** deleteById
	 * @param id
	 * @throws Exception StimmeDeleteExeption
	 */
	public void deleteById(int id)throws Exception {
		HibernateTemplate template = getHibernateTemplate();
		Stimme s = findById(id);
		List<Noten> noten = findNotenByStimmeId(s.getId());
		if (noten == null || noten.size() == 0) {
			template.delete(s);
		} else {
			throw new StimmeDeleteExeption();
		}
		template.flush();
	}
}
